const path = require("path");
const fs = require("fs-extra");
const glob = require("glob");
const JavaScriptObfuscator = require("javascript-obfuscator");

// 混淆配置
const obfuscationOptions = {
	compact: true, // 压缩代码
	// controlFlowFlattening: true, // 控制流扁平化
	// deadCodeInjection: true, // 注入无用代码
	debugProtection: true, // 防止调试
	disableConsoleOutput: true, // 禁用 console.log
	renameGlobals: true, // 重命名全局变量
	// selfDefending: true, // 自保护（防止格式化）
	// stringArray: true, // 字符串数组化
	stringArrayEncoding: ["base64"], // 字符串编码
	stringArrayThreshold: 0.75, // 字符串数组化阈值
	// unicodeEscapeSequence: true // 使用 Unicode 转义序列
};

// 要混淆的目录
const inputDir = path.join(__dirname, "src"); // 你的源代码目录
const outputDir = path.join(__dirname, "obfuscated"); // 混淆后的输出目录

// 清空输出目录
fs.emptyDirSync(outputDir);

// 获取所有 .js 文件
const files = glob.sync("**/*.js", { cwd: inputDir });

// 批量混淆
files.forEach((file) => {
	const filePath = path.join(inputDir, file);
	const outputPath = path.join(outputDir, file);

	// 读取文件内容
	const code = fs.readFileSync(filePath, "utf8");

	// 混淆代码
	const obfuscatedCode = JavaScriptObfuscator.obfuscate(
		code,
		obfuscationOptions
	).getObfuscatedCode();

	// 确保输出目录存在
	fs.ensureDirSync(path.dirname(outputPath));

	// 写入混淆后的代码
	fs.writeFileSync(outputPath, obfuscatedCode, "utf8");

	console.log(`Obfuscated: ${file} -> ${outputPath}`);
});

//移动静态资源

// 定义路径
const srcDir = path.join(__dirname, "src");
// const targetDir = path.join(__dirname, "obfuscated");
const distDir = path.join(__dirname, "dist");
const resourceDirNames = ["assets"];

function copyFolder(srcDir, destDir) {
	// 如果目标文件夹不存在，则创建它
	if (!fs.existsSync(destDir)) {
		fs.mkdirSync(destDir, { recursive: true });
	}

	// 读取源文件夹内容
	const files = fs.readdirSync(srcDir);

	files.forEach((file) => {
		const srcPath = path.join(srcDir, file);
		const destPath = path.join(destDir, file);
		const stat = fs.statSync(srcPath);

		if (stat.isDirectory()) {
			// 如果是子文件夹，递归复制
			copyFolder(srcPath, destPath);
		} else {
			// 如果是文件，直接复制
			fs.copyFileSync(srcPath, destPath);
			console.log(`Copied: ${srcPath} -> ${destPath}`);
		}
	});
}

for (const r of resourceDirNames) {
	// 检查目标文件夹是否存在
	if (!fs.existsSync(outputDir)) {
		console.error(`Error: Directory ${outputDir} does not exist.`);
		process.exit(1);
	}
	// 复制文件夹
	copyFolder(path.join(srcDir, r), path.join(outputDir, r));
}

//移动渲染进程项目
copyFolder(
	path.join(__dirname, "platform", "dist"),
	path.join(__dirname, "obfuscated", "platform")
);

//移动渲染python脚本
// copyFolder(
// 	path.join(__dirname, "python", "dist"),
// 	path.join(__dirname, "obfuscated", "python")
// );

if (fs.existsSync(distDir)) {
	// 清空输出目录
	fs.emptyDirSync(distDir);
}

console.log("Obfuscation complete!");
